package com.lsz.adapter;

import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class DefaultAdapter<T extends List<?>> extends BaseAdapter {

	/**
	 * 适配器显示的数据
	 */
	protected List<T> adapterDatas;

	/**
	 * 上下文
	 */
	protected Context context;

	/**
	 * Item 布局
	 */
	public int itemLayoutId;

	public Callback<T> callback;

	@SuppressWarnings("unused")
	private DefaultAdapter() {};

	/**
	 * 构造函数
	 * @param  context      : 上下文
	 * @param  datas        : 适配器的数据
	 * @param  itemLayoutId : 列表项布局文件ID
	 * @param  callback     : 设置 Item 回调函数 
	 */
	public DefaultAdapter(Context context, List<T> datas, int itemLayoutId, Callback<T> callback) {
		this.context      = context;
		this.itemLayoutId = itemLayoutId;
		this.adapterDatas = datas;
		this.callback     = callback;
	}

	public List<T> getDatas() {
		return adapterDatas;
	}

	public void setDatas(List<T> datas) {
		this.adapterDatas = datas;
	}

	@Override
	public int getCount() {
		return adapterDatas != null ? adapterDatas.size() : 0;
	}

	@Override
	public Object getItem(int position) {
		return adapterDatas != null ? adapterDatas.get(position) : null;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final ViewHolder holder = ViewHolder.getHolder(context, convertView, parent, itemLayoutId);
		if (callback != null) {
			callback.setItemData(holder, adapterDatas, position);
		}
		return holder.getContentView();
	}

	public interface Callback<T extends List<?>> {
		/**
		 * 设置 Item 数据
		 * @param holder        : ViewHelper
		 * @param adapterDatas  : Adapter显示的数据
		 * @param position      : 当前位置
		 */
		void setItemData(ViewHolder holder, List<T> adapterDatas, int position);
	}
}
